package la.iok.hzsvn.lewin.movie.service;

import la.iok.hzsvn.lewin.movie.entity.ClueCard;
import la.iok.hzsvn.lewin.movie.entity.ClueCardInstance;
import la.iok.hzsvn.lewin.movie.model.ClueCardVo;
import la.iok.hzsvn.lewin.mybatis.service.BaseService;
import la.iok.hzsvn.share.annotations.NotNull;
import la.iok.hzsvn.share.annotations.NotNullElement;
import la.iok.hzsvn.share.annotations.Nullable;

import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.List;

public interface ClueCardInstanceService extends BaseService<ClueCardInstance,Long> {

    @NotNull
    Long save(@NotNull ClueCard clueCard, @NotNull Long groupInstanceId);

    /**
     * 查询线索列表
     * @param groupInstanceIds 线索分组实例id集合
     * @return 线索列表
     */
    @NotNull
    @NotNullElement
    List<ClueCardVo> clueCards(@Nullable Collection<Long> groupInstanceIds);

    /**
     * 查询剧本实例所有的线索
     * @param movieInstanceId 剧本实例id
     * @return 线索列表
     */
    @NotNull
    @NotNullElement
    List<ClueCardVo> clueCards(@Nullable Long movieInstanceId);

    /**
     * 高清图片摘要
     * @param movieInstanceId 剧本实例id
     * @param id 线索id,不是线索实例id
     * @return 摘要信息
     */
    @Nullable
    String hdFileDigest(@Nullable Long movieInstanceId, @Nullable Long id);

    /**
     * 高清图片存储路径
     * @param movieInstanceId 剧本实例id
     * @param id 线索id,不是线索实例id
     * @return 存储路径
     */
    @Nullable
    String hdFileStorePath(@Nullable Long movieInstanceId, @Nullable Long id);

    /**
     * 标清图片摘要
     * @param movieInstanceId 剧本实例id
     * @param clueCardId 线索id,不是线索实例id
     * @return 摘要信息
     */
    String sdFileDigest(Long movieInstanceId, Long clueCardId);

    /**
     * 标清图片摘要
     * @param movieInstanceId 剧本实例id
     * @param clueCardId 线索id,不是线索实例id
     * @return 摘要信息
     */
    String sdFileStorePath(Long movieInstanceId, Long clueCardId);

    /**
     * 下载标清文件
     * @param response 客户端响应
     * @param movieInstanceId 剧本实例id
     * @param clueCardId 线索id,不是线索实例id
     */
    void downloadSdFile(@NotNull HttpServletResponse response, @Nullable Long movieInstanceId, @Nullable Long clueCardId);

    /**
     * 下载高清文件
     * @param response 客户端响应
     * @param movieInstanceId 剧本实例id
     * @param clueCardId 线索id,不是线索实例id
     */
    void downloadHdFile(@NotNull HttpServletResponse response, @Nullable Long movieInstanceId, @Nullable Long clueCardId);

    /**
     * 标记删除记录
     * @param ids 记录id的集合
     */
    void markFileDeleted(Collection<Long> ids);
}
